function [] = fun_dbscan(data,epsilon,minPts,xlab,ylab,newfigure)
    if(newfigure == 1)
        figure
    end
    d = rangesearch(data,data,epsilon);
    % 计算数据的大小
    [n,m] = size(data);
    % 设置访问标记
    vist = zeros(n,1);
    % 设置聚类组
    idx = zeros(n,1);
    % 设置聚类标签
    labels = 0;
    % 循环整个点组
    for i = 1:n
        % 是否第i个点已经被访问过，如果被访问过，就下一个点
        % 如果没有被访问过，则继续处理
        if vist(i,:) == 0
            % 访问设置为1，没被访问为0
            vist(i,:) = 1;
            
            % 提取集合
            neig = d{i};
            % 判断是否满足阈值条件，即是否可以聚类
            if numel(neig)>=minPts
                % 如果密度可以聚类，创建类的标签
                labels = labels+1;
                % 为当前点归类
                idx(i,:) = labels;
                % 设置循环指针
                k = 1;
                
                % 进行密度可达寻找
                while neig
                    % 寻找d集合中第i个点的esp邻域的第k个点
                    j = neig(k);
                    
                    % 判断当前点是否被访问过
                    if  vist(j,:) == 0
                        % 如果没被访问，则设置为1，即访问过
                        vist(j,:) = 1;
                        % 提取新的集合
                        neig2 = d{j};
                        
                        % 判断当前点的领域点数量是否满足条件
                        if numel(neig2)>=minPts
                            % 满足条件，即将当前点的所有邻域点纳入第i点集合
                            neig = [neig,neig2];
                            neig = unique(neig);
                        end
                    else
                        neig(k) =[];
                    end
                    
                    % 如果第j个点没有从属类，则归类
                    if idx(j,:) == 0
                        idx(j) = labels;
                    end
               
                end   
            end
        end
    end
    gscatter(data(:,1),data(:,2),idx);
    title(['DBSCAN聚类  (epsilon = ' num2str(epsilon) ', MinPts = ' num2str(minPts) ')']);
    xlabel(xlab);
    ylabel(ylab);

    le_str(1) = "噪声点";
    for m = 1:labels
        le_str(m+1) = ("点蔟"+num2str(m));
    end
    legend(le_str);
end